(function (o, i) { typeof exports == 'object' && typeof module < 'u' ? i(exports) : typeof define == 'function' && define.amd ? define(['exports'], i) : ((o = typeof globalThis < 'u' ? globalThis : o || self), i((o.aat = {}))); })(this, function (o) { 'use strict'; function i(s, e, t) { return Math.min(Math.max(s, e), t); } function l({ from: s, to: e, percentage: t, unit: n }) { return s + (e - s) * t + (n || ''); } const a = { offsetBottom: 0, offsetTop: 0, offsetRight: 0, offsetLeft: 0, addWrapper: !1, wrapperClass: '', container: document.documentElement }; class c { static Container(e = document.documentElement) { return new h(e); } static Element(e, t) { return new d(e, { ...a, ...t }); } onScroll(e) { (this._handler = e), this._onScroll(); } } class h extends c { constructor(e) { super(), (this._container = e), (e === document.documentElement ? window : e).addEventListener('scroll', this._onScroll.bind(this)); } _onScroll() { const e = this._container.scrollTop, t = this._container.scrollHeight - this._container.clientHeight, n = i(e / t, 0, 1) || 0, r = this._container.scrollLeft, p = this._container.scrollWidth - this._container.clientWidth, _ = i(r / p, 0, 1) || 0; this._handler && typeof this._handler == 'function' && requestAnimationFrame(() => this._handler({ percentageY: n, percentageX: _ })); } } class d extends c { constructor(e, t) { super(), (this._element = e), (this._options = t), (this._lastPercentageY = null), (this._lastPercentageX = null), this._options.addWrapper && this._addWrapper(), (this._options.container === document.documentElement ? window : this._options.container).addEventListener('scroll', this._onScroll.bind(this)), requestAnimationFrame(() => this._onScroll()); } _addWrapper() { (this._wrapper = document.createElement('div')), this._options.wrapperClass && this._wrapper.classList.add(this._options.wrapperClass), this._element.parentNode.insertBefore(this._wrapper, this._element), this._wrapper.appendChild(this._element); } get _containerClientHeight() { return this._options.container === window ? window.innerHeight : this._options.container.clientHeight; } get _containerClientWidth() { return this._options.container === window ? window.innerWidth : this._options.container.clientWidth; } get _elRectRelativeToContainer() { const t = (this._options.addWrapper ? this._wrapper : this._element).getBoundingClientRect(); if (this._options.container === document.documentElement) return t; const n = this._options.container.getBoundingClientRect(); return { width: t.width, height: t.width, left: t.left - n.left, top: t.top - n.top, right: t.right - n.right, bottom: t.bottom - n.bottom }; } _calculatePercentageY() { const e = this._elRectRelativeToContainer, t = this._containerClientHeight - this._options.offsetBottom, n = this._options.offsetTop, r = t - n; return i((t - e.top) / r, 0, 1); } _calculatePercentageX() { const e = this._elRectRelativeToContainer, t = this._containerClientWidth - this._options.offsetRight, n = this._options.offsetLeft, r = t - n; return i((t - e.left) / r, 0, 1); } _onScroll() { const e = this._calculatePercentageY(), t = this._calculatePercentageX(); this._handler && typeof this._handler == 'function' && (this._lastPercentageY !== e || this._lastPercentageX !== t) && requestAnimationFrame(() => this._handler({ percentageY: e, percentageX: t })), (this._lastPercentageY = e), (this._lastPercentageX = t); } } (o.ScrollObserver = c), (o.valueAtPercentage = l), Object.defineProperty(o, Symbol.toStringTag, { value: 'Module' }); });